/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package EJERCICIO4;

import EJERCICIO4.Tupla;
import EJERCICIO4.Atributo;
import java.util.ArrayList;
import java.util.List;
import javax.print.DocFlavor;
import java.util.Iterator;
import java.util.Scanner;

public class Main {
    public static void IngresarNTupla(int n,int NroaTributos)
    {
        Scanner lector=new Scanner (System.in);
       List<Atributo> Clase= new ArrayList<Atributo>();
       String []Titulos=new String[NroaTributos] ;
       //Leemos los atributos
       for (int i=0;i<=NroaTributos;i++)
       {
           System.out.println("Ingrese el nombre del atributo "+ i);
            String Nombre=lector.next();
            Titulos[i]=Nombre;
           Clase.add(new Atributo(Nombre, String.class));
       }
       //LEEMOS LOS DATOS 
       Relacion rel = new Relacion(Clase);
            //tipo de atributos

       
       for (int i=0;i<=n;i++)
       {
           List<Comparable> v = new ArrayList<Comparable>();
           for (int j=0;j< NroaTributos;j++)
           {
           System.out.println(Titulos[j]+" "+ i);
            String At=lector.next();
            v.add(new String(At));
           }
           //COLOCAMOS LAS DUPLAS
           Tupla t = new Tupla(new IdentificadorTupla("Clase", i), v);
           GestorIOTupla man = new GestorIOTupla(rel, "Clase");
           System.out.println("Escribir Tupla..." + t);

            byte[] bytes = new byte[1024];
            man.escribirTupla(t, bytes, i);
 
       }

    }
     public static void main(String[] args) {
       
        try
        {
        List<Atributo> Cliente = new ArrayList<Atributo>();

            Cliente.add(new Atributo("IdCliente", Integer.class));

            Cliente.add(new Atributo("Nombre",String.class));

            Cliente.add(new Atributo("Direccion", String.class));

            Cliente.add(new Atributo("Telefono", Long.class));

            

            Relacion rel = new Relacion(Cliente);
            //tipo de atributos
             List<Comparable> v = new ArrayList<Comparable>();

            v.add(new Integer(1001));

            v.add(new String("Juan"));

            v.add(new String("cusco"));

            v.add(new Long(226688));

            Tupla t = new Tupla(new IdentificadorTupla("Cliente", 0), v);

            GestorIOTupla man = new GestorIOTupla(rel, "Cliente");
 
            java.io.RandomAccessFile raf = new java.io.RandomAccessFile("Cliente", "rw");

            System.out.println("Escribir Tupla..." + t);

            byte[] bytes = new byte[1024];
            man.escribirTupla(t, bytes, 0);

            raf.close();
        // --------------------------muestre el esquema creado en pantalla----------------------------
            raf = new java.io.RandomAccessFile("Cliente", "r");

            System.out.println("Leer tupla...");
            // t = man.leerTupla(bytes);
            Par<Tupla, Integer> st = man.leerTupla(bytes, 0);

            System.out.println(st);

             //---------------------------Modifique el esquema de tal manera que se añada un nuevo atributo denominado tipo_cliente con 
            //-----------------------------dominio de valores de tipo carácter luego muéstrelo en pantalla 
                  Cliente.add(new Atributo("Tipo", String.class));
                  v.add(new String("Natural"));  
                  System.out.println("Escribir Tupla..." + t);
                  man.escribirTupla(t, bytes, 0);
            //---------------------------------Finalmente modifique nuevamente el esquema para eliminar el atributo telefono_cliente
            //-------------------------------------------y luego muestre el esquema resultante.
                  
              Cliente.remove(3);
              v.remove(3);
              t = new Tupla(new IdentificadorTupla("Cliente", 0), v);
              System.out.println("Escribir Tupla..." + t);
              man.escribirTupla(t, bytes, 0);
              raf.close();
              
              //2)------------------------------- Utilizando las Clases de Software implementado en la Gestión de Tuplas,
              //-----------------------------------desarrolle una aplicación para realizar cualquier Esquema de Relación, 
              //---------------------------------donde se pueda ingresar "n" tuplas las cuales deben ser escritas en una
              //---------------------------------array de bytes y recuperadas del mismo array.
              
            Scanner lector=new Scanner (System.in);
            
           //Leemos el nro de duplas que se desea crear
                System.out.println("Ingrese el nro de duplas" );
               int n=lector.nextInt();     
                System.out.println("Ingrese el nro de atributos de cada dupla" );
               int nro=lector.nextInt();  
               IngresarNTupla(n, nro);
               
            // t = man.leerTupla(bytes);
//              for(int i=0;i< b.length;i++)
//                System.out.println(b[i]+ "");
           


        } catch (Exception e) {

            System.err.println("Exception: " + e.getMessage());

            e.printStackTrace(System.err);

        }
    }
}
